package mx.unam.fciencias.ActividadesCulturales.services;

import java.util.List;
import mx.unam.fciencias.actividadesculturales.entidades.portal.UsuarioSistema;
import mx.unam.fciencias.ActividadesCulturales.services.DAO.UsuarioSistemaDAO;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * Capa de Negocio para comunicarse con la capa de datos de la entidad usuario.
 * @author lumartin
 */
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public class ServicioUsuario {

    /** Acceso a datos de usuario. */
    private UsuarioSistemaDAO usuarioDAO;

    /**
     * Obtiene a usuarioDAO
     * @return usuarioDAO
     */
    public UsuarioSistemaDAO getUsuarioDAO() {
        return usuarioDAO;
    }

    /**
     * Asigna un usuarioDAO
     * @param usuarioDAO a asignar.
     */
    public void setUsuarioDAO(UsuarioSistemaDAO usuarioDAO) {
        this.usuarioDAO = usuarioDAO;
    }

    /**
     * Verifica que el usuario y la contraseña sean correctos.
     * @param usuario de sistema.
     * @param passwd del usuario.
     * @return el usuario
     */
    public UsuarioSistema verificaLogin(String usuario, String passwd) {
        if (usuario == null || passwd == null) {
            return null;
        }
        List<UsuarioSistema> usuarios =
                usuarioDAO.getUsuarios(usuario, passwd, null, true);
        if (usuarios.isEmpty()) {
            return null;
        }
        return usuarios.get(0);
    }

    /**
     * Obtiene un usuario a partir de su correo.
     * @param email correo.
     * @return el usuario.
     */
     public UsuarioSistema buscaEmail(String email) {
        return usuarioDAO.busca(email, null);
    }

    /**
     * Obtiene un usuario a partir de su nombre de usuario.
     * @param username usuario.
     * @return el usuario.
     */
    public UsuarioSistema buscaUsername(String username) {
        return usuarioDAO.busca(null, username);
    }

    /**
     * Obtiene todos los usuarios registrados.
     * @return la lista de usuarios.
     */
    public List<UsuarioSistema> getTodos() {
        return usuarioDAO.getUsuarios(null, null, null, null);
    }

    /**
     * Obtiene un usuario a partir de su identificador.
     * @param usuarioId identificador del usuario.
     * @return el usuario.
     */
    public UsuarioSistema getById(long usuarioId) {
        return usuarioDAO.getUsuario(usuarioId);
    }

    /**
     * Obtiene usuarios por nombre o usuario
     * @param nombreOusuario del usuario
     * @return la lista de los usuarios.
     */
    public List<UsuarioSistema> getUsuario(String nombreOusuario) {
        return usuarioDAO.getUsuarios(nombreOusuario);
    }

    /**
     * Guarda o actualiza un usuario.
     * @param usuario a guardar.
     * @return true si se guardo correctamente false si no.
     */
    public boolean guarda(UsuarioSistema usuario) {
        return usuarioDAO.guardar(usuario);
    }

}
